﻿Imports Proyecto_PAVI_Academia.AccesoBD

Public Class frm_ABM_Cursos
    'Dim cuotas As New frm_ABM_Cuotas
   
    Enum estado
        insertar
        modificar
        eliminar
    End Enum
    'para todo lo que sea acceso a la base de datos
    Dim acceso As New AccesoBD

    'para programar la funcionalidad del boton guardar depende lo que se haya seleccionado
    Dim accion As estado

    'esto me guarda el id del curso seleccionado en la grilla
    Dim idCurso As String

    'si no encuentro el tipo de curso que quiero, agrego uno
    Private Sub btnAgregarTipo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgregarTipo.Click
        Dim agregar_tipo As New frm_ABM_TipoCurso
        agregar_tipo.Show()

    End Sub

    Private Sub Cursos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
        acceso.load_combo(cmbCurso, acceso.devuelveTabla("TipoCurso"), "idTipoCurso", "nombre")
        acceso.load_combo(cmbBusqCurso, acceso.devuelveTabla("TipoCurso"), "idTipoCurso", "nombre")
        acceso.load_combo(cmbTurno, acceso.devuelveTabla("Turnos"), "idTurno", "nombre")
        Dim consulta = "select *, upper(apellido)+', '+nombre as DatosProfesor from Profesores"
        acceso.load_combo(cmbProfesor, acceso.ejecutaSQL(consulta), "legajoProfesor", "DatosProfesor")
        btnNuevo.Focus()
        Me.gridCurso.Enabled = False
        btnGuardar.Enabled = False
        btnCancelar.Enabled = False
        ContextMenuStrip1.Enabled = False
        cargarGrillaCursos()
    End Sub
    Private Sub vaciarCampos()

        Dim miControl As Object

        For Each miControl In Me.gridCurso.Controls
            If miControl.GetType Is GetType(System.Windows.Forms.TextBox) Then
                miControl.Clear()
            End If
            If miControl.GetType Is GetType(System.Windows.Forms.ComboBox) Then
                miControl.SelectedValue = -1
            End If
            If miControl.GetType Is GetType(System.Windows.Forms.MaskedTextBox) Then
                miControl.Clear()
            End If
            System.Windows.Forms.Application.DoEvents()
        Next
        limpiarChecks()
    End Sub
    Private Sub limpiarChecks()
        Me.chLunes.Checked = False
        Me.chMartes.Checked = False
        Me.chMiercoles.Checked = False
        Me.chJueves.Checked = False
        Me.chViernes.Checked = False
        Me.chSabado.Checked = False
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        accion = estado.insertar
        gridCurso.Enabled = True
        vaciarCampos()
        cmbCurso.Focus()
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
    End Sub
    Private Sub cmbCurso_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbCurso.Click
        acceso.load_combo(cmbCurso, acceso.devuelveTabla("TipoCurso"), "idTipoCurso", "nombre")
    End Sub

    Private Sub txtFechaInicio_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtFechaInicio.Validated
        If (IsDate(txtFechaInicio.Text)) = False Then
            MsgBox("Fecha errónea")
            txtFechaInicio.Focus()
            Exit Sub
        End If
        If DateTime.Parse(txtFechaInicio.Text) < DateTime.Now.Date = True Then
            MsgBox("La fecha no puede ser menor a la de hoy!")
            txtFechaInicio.Focus()
            Exit Sub
        End If
    End Sub
    Private Sub txtFechaFin_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtFechaFin.Validated
        If (IsDate(txtFechaFin.Text)) = False Then
            MsgBox("Fecha errónea")
            txtFechaFin.Focus()
            Exit Sub
        End If
        'Compare funciona asi
        'Less than zero t1 is earlier than t2.
        'Zero() t1 is the same as t2.
        'Greater than zero t1 is later than t2.
        If DateTime.Compare(DateTime.Parse(txtFechaInicio.Text), DateTime.Parse(txtFechaFin.Text)) >= 0 Then
            MsgBox("La fecha de finalizacíón no puede ser mayor o igual a la fecha de inicio")
            txtFechaFin.Focus()
            Exit Sub
        End If

    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click
        If accion = estado.insertar Then
            insertar()
        End If
        If accion = estado.modificar Then
            modificar()
        End If
        If accion = estado.eliminar Then
            eliminar()
        End If
        grillaCursos.Rows.Clear()
        cargarGrillaCursos()
        btnGuardar.Enabled = False
        gridCurso.Enabled = False

    End Sub
    Private Sub insertar()
        Dim comando As String

        comando = "insert into Cursos values('"
        comando &= DateTime.Parse(txtFechaInicio.Text) & "',"
        comando &= cmbCurso.SelectedIndex + 1 & ","
        comando &= cmbProfesor.SelectedIndex + 1
        comando &= ","
        comando &= Integer.Parse(txtAula.Text)
        comando &= ",'" & DateTime.Parse(txtFechaFin.Text) & "','"
        comando &= diasSeleccionados()
        comando &= "',"
        comando &= cmbTurno.SelectedIndex + 1
        comando &= ","
        comando &= Single.Parse(txtDuracion.Text)
        comando &= ","
        comando &= Integer.Parse(txtCuotas.Text)
        comando &= ","
        comando &= Single.Parse(txtPrecio.Text)
        comando &= ","
        comando &= Integer.Parse(txtCupo.Text) & ","
        'el estado en 0 quiere decir que esta activo
        comando &= 0
        comando &= ")"

        acceso._insertar(comando)
        MsgBox("Curso cargado con éxito")

        vaciarCampos()
    End Sub
    Private Sub modificar()
        Dim comando As String
        comando = "update Cursos set fechaInicio='"
        comando &= DateTime.Parse(txtFechaInicio.Text) & "',idTipoCurso="
        comando &= cmbCurso.SelectedIndex + 1 & ",legajoProfesor="
        comando &= cmbProfesor.SelectedIndex + 1
        comando &= ",aula="
        comando &= Integer.Parse(txtAula.Text)
        comando &= ",fechaFin='" & DateTime.Parse(txtFechaFin.Text) & "',dias='"
        comando &= diasSeleccionados()
        comando &= "',idTurno="
        comando &= cmbTurno.SelectedIndex + 1
        comando &= ",duracionHoras="
        comando &= Single.Parse(txtDuracion.Text)
        comando &= ",cantCuotas="
        comando &= Integer.Parse(txtCuotas.Text)
        comando &= ",precio="
        comando &= Single.Parse(txtPrecio.Text)
        comando &= ",cupo="
        comando &= Integer.Parse(txtCupo.Text) & ",estado="
        'el estado en 0 quiere decir que esta activo
        comando &= 0
        comando &= " where idCurso=" & idCurso

        acceso._modificar(comando)

        MsgBox("Curso modificado con éxito")
    End Sub
    Private Sub eliminar()
        Dim comando As String
        comando = "update Cursos set estado=1 where idCurso=" & Integer.Parse(idCurso)

        acceso._eliminar(comando)

        MsgBox("Curso eliminado con exito")
    End Sub
    Private Sub cargarGrillaCursos(Optional ByVal indiceCombo As String = "")
        Dim comando As String
        Dim tabla As DataTable
        If indiceCombo = "" Then
            comando = "Select Cursos.idCurso, TipoCurso.nombre, Cursos.fechaInicio from Cursos inner join TipoCurso on (Cursos.idTipoCurso=TipoCurso.idTipoCurso) where Cursos.estado=0"
        Else
            comando = "Select Cursos.idCurso, TipoCurso.nombre, Cursos.fechaInicio from Cursos inner join TipoCurso on (Cursos.idTipoCurso=TipoCurso.idTipoCurso) where Cursos.estado=0" & indiceCombo
        End If
        'este metodo devuelve una tabla formada con el comando que le pase por parametro
        tabla = acceso.ejecutaSQL(comando)
        grillaCursos.Rows.Clear()
        Dim c As Integer
        For c = 0 To tabla.Rows.Count - 1
            Me.grillaCursos.Rows.Add(tabla.Rows(c)("idCurso"), tabla.Rows(c)("nombre"), tabla.Rows(c)("fechaInicio"))
            'TMB se podia hacer
            'Me.grillaCursos.Rows(c).Cells(apellido).value = tabla.rows(c)("apellido")
            'Me.grillaCursos.Rows(c).Cells("nombre").Value = tabla.Rows(c)("nombre")
            'Me.grillaCursos.Rows(c).Cells("fecha").Value = tabla.Rows(c)("fechaInicio")
        Next
        grillaCursos.ClearSelection()
    End Sub
    Private Sub btnRefrescar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRefrescar.Click
        cargarGrillaCursos()
        cmbBusqCurso.SelectedIndex = -1
        vaciarCampos()
        gridCurso.Enabled = False
        btnNuevo.Enabled = True
    End Sub

    Private Sub actualizarCampos(ByVal idCurso As String)
        Dim tabla As DataTable = acceso.devuelveTabla("Cursos where idCurso=" & Integer.Parse(idCurso))
        Dim fila As DataRow = tabla.Rows(0)

        cmbCurso.SelectedIndex = CSng(fila("idTipoCurso")) - 1
        txtFechaInicio.Text = CStr(fila("fechaInicio"))
        cmbProfesor.SelectedIndex = CSng(fila("legajoProfesor")) - 1
        txtAula.Text = CStr(fila("aula"))
        txtFechaFin.Text = CStr(fila("fechaFin"))
        cargarCheckDias(CStr(fila("dias")))
        cmbTurno.SelectedIndex = CSng(fila("idTurno")) - 1
        txtDuracion.Text = CStr(fila("duracionHoras"))
        txtCuotas.Text = CStr(fila("cantCuotas"))
        txtCupo.Text = CStr(fila("cupo"))
        txtPrecio.Text = CStr(fila("precio"))

    End Sub
    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        If cmbBusqCurso.SelectedIndex = -1 Then
            MsgBox("Seleccione tipo de curso para poder buscar!")
            cmbBusqCurso.Focus()
            Exit Sub
        End If
        grillaCursos.Rows.Clear()
        cargarGrillaCursos(" and Cursos.idTipoCurso=" & Convert.ToString(cmbBusqCurso.SelectedIndex + 1))

    End Sub
    Private Sub grillaCursos_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grillaCursos.SelectionChanged
        establecerSeleccion()
    End Sub
    Private Function diasSeleccionados() As String
        Dim dias As String = ""
        If chLunes.Checked = True Then
            dias += "Lunes"
        End If
        If chMartes.Checked = True Then
            If dias <> "" Then
                dias += ","
            End If
            dias += "Martes"
        End If
        If chMiercoles.Checked = True Then
            If dias <> "" Then
                dias += ","
            End If
            dias += "Miercoles"
        End If
        If chJueves.Checked = True Then
            If dias <> "" Then
                dias += ","
            End If
            dias += "Jueves"
        End If
        If chViernes.Checked = True Then
            If dias <> "" Then
                dias += ","
            End If
            dias += "Viernes"
        End If
        If chSabado.Checked = True Then
            If dias <> "" Then
                dias += ","
            End If
            dias += "Sabado"
        End If
        Return dias
    End Function
    Private Sub cmbBusqCurso_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbBusqCurso.Click
        acceso.load_combo(cmbBusqCurso, acceso.devuelveTabla("TipoCurso"), "idTipoCurso", "nombre")

    End Sub
    
    Private Sub camposEnteros_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtAula.KeyPress, txtCuotas.KeyPress, txtCupo.KeyPress
        If Char.IsNumber(e.KeyChar) = False And (e.KeyChar = ChrW(Keys.Back)) = False Then
            MsgBox("Caracter no válido! Ingrese SOLO numeros", vbCritical, "Importante")
            e.KeyChar = ""
        End If
    End Sub
    Public Sub validarDigitosDecimales(ByVal CajaTexto As Windows.Forms.TextBox, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Char.IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf e.KeyChar = "." And Not CajaTexto.Text.IndexOf(".") Then
            e.Handled = True
        ElseIf e.KeyChar = "." Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub

    Private Sub txtDuracion_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDuracion.KeyPress
        validarDigitosDecimales(Me.txtDuracion, e)
    End Sub

    Private Sub txtPrecio_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrecio.KeyPress
        validarDigitosDecimales(Me.txtDuracion, e)
    End Sub

    Private Sub cmbCurso_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbCurso.Validated
        If cmbCurso.SelectedIndex = -1 Then
            MsgBox("Seleccione Tipo de Curso")
            cmbCurso.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub cmbProfesor_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbProfesor.Validated
        If cmbProfesor.SelectedIndex = -1 Then
            MsgBox("Seleccione un Profesor")
            cmbProfesor.Focus()
            Exit Sub
        End If
    End Sub
    Private Sub txtAula_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtAula.Validated
        If txtAula.Text = "" Then
            MsgBox("Ingrese numero de aula")
            txtAula.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub cmbTurno_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmbTurno.Validated
        If cmbTurno.SelectedIndex = -1 Then
            MsgBox("Seleccione turno de curso")
            cmbTurno.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub txtDuracion_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtDuracion.Validated
        If txtDuracion.Text = "" Then
            MsgBox("Ingrese duración en Hs")
            txtDuracion.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub txtCuotas_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCuotas.Validated
        If txtCuotas.Text = "" Then
            MsgBox("Ingrese cantidad de cuotas")
            txtCuotas.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub txtCupo_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCupo.Validated
        If txtCupo.Text = "" Then
            MsgBox("Ingrese cupo del curso")
            txtCupo.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub txtPrecio_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPrecio.Validated
        If txtPrecio.Text = "" Then
            MsgBox("Ingrese precio del curso")
            txtPrecio.Focus()
            Exit Sub
        End If
    End Sub

    Private Sub btnVolver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnVolver.Click
        Me.Close()
    End Sub

   
    Private Sub cargarCheckDias(ByVal cadena As String)
        limpiarChecks()
        Dim dias = cadena.Split(",")
        Dim aux As String
        For c = 0 To dias.Length - 1
            aux = dias(c)
            If aux = "Lunes" Then
                chLunes.Checked = True
            End If
            If aux = "Martes" Then
                chMartes.Checked = True
            End If
            If aux = "Miercoles" Then
                chMiercoles.Checked = True
            End If
            If aux = "Jueves" Then
                chJueves.Checked = True
            End If
            If aux = "Viernes" Then
                chViernes.Checked = True
            End If
            If aux = "Sabado" Then
                chSabado.Checked = True
            End If
        Next

    End Sub
    Private Sub chSabado_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles chSabado.Validated
        If Me.chLunes.Checked = False Then
            If chMartes.Checked = False Then
                If chMiercoles.Checked = False Then
                    If chJueves.Checked = False Then
                        If chViernes.Checked = False Then
                            If chSabado.Checked = False Then
                                MsgBox("Seleccione al menos un día de cursado!")
                                chLunes.Focus()
                                Exit Sub
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        vaciarCampos()
        gridCurso.Enabled = False
        btnGuardar.Enabled = False
        btnNuevo.Enabled = True
        btnCancelar.Enabled = False
    End Sub
    Private Sub establecerSeleccion()
        If grillaCursos.SelectedRows.Count > 0 Then
            idCurso = grillaCursos.Item("id", grillaCursos.SelectedRows(0).Index).Value
            actualizarCampos(idCurso)
            ContextMenuStrip1.Enabled = True
        End If
    End Sub
    Private Sub ModificarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ModificarToolStripMenuItem.Click
        accion = estado.modificar
        establecerSeleccion()
        Me.gridCurso.Enabled = True
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
        cmbCurso.Focus()
        btnNuevo.Enabled = False
    End Sub

    Private Sub EliminarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EliminarToolStripMenuItem.Click
        If MessageBox.Show("Esta seguro que desea eliminar el registro?!", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            accion = estado.eliminar
            establecerSeleccion()
            Me.gridCurso.Enabled = True
            btnGuardar.Enabled = True
            btnCancelar.Enabled = True
            cmbCurso.Focus()
            btnNuevo.Enabled = False
        End If
    End Sub
    Private Function cargarTipo()

        Dim tipo As String
        Dim tabla As DataTable
        tabla = acceso.ejecutaSQL("select nombre from TipoCurso where idTipoCurso=" & Me.cmbCurso.SelectedIndex + 1)
        tipo = tabla.Rows(0)("nombre")
        Return tipo
    End Function
    Private Sub CuotasToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CuotasToolStripMenuItem.Click
        Dim cuotas As New frm_ABM_Cuotas
        cuotas.txt_id.Text = Me.idCurso
        cuotas.txt_tipo.Text = cargarTipo()
        cuotas.txt_fecha_curso.Text = DateTime.Parse(Me.txtFechaInicio.Text)
        cuotas.txt_precio.Text = Me.txtPrecio.Text
        cuotas.txt_cant.Text = Me.txtCuotas.Text
        cuotas.Show()
    End Sub

End Class